软件安全测试的方式有哪些
软件安全测试的方式有以下几种:
- 静态分析测试
静态分析是指在不执行代码的情况下对其进行评估的过程。
通过对代码的检查,往往能指出安全问题的根源;能够在开发早期发现错误当安全研究人员发现一种新的攻击时;静态分析工具可以容易地对大量代码进行重新检查。
- 基于模型的安全测试
基于模型的安全性测试是对软件的结构和行为进行建模,生成相应的测试模型,再由测试模型自动生成测试用例,以驱动安全性测试常用的软件测试模型有有限状态自动机、 UML模型、马尔可夫链等
- 基于故障注入的安全性测试
故障注入是评测容错机制的一种有效方法。通过人为方式将故障引人到系统当中,加速系统发生故障的失效的过程。
针对应用与环境的交互点,主要包括用户输入、文件系统、网络接口、环境变量等引起的故障。
故障注入可以有效地模拟各种异常程序行为,通过故障注人函数能强制使程序进入某些 特定状态,而这些状态在采用常规的标准测 试技术时是无法达到的。
- 基于语法的安全性测试
语法测试是根据被测软件的功能接口的语法生成测试输入,检测被测软件对各类输入的响应。
语法测试适用于被测软件有较明确的接口语法,易于表达语法并生成测试输入的情况。
- 模糊测试
Fuzzing:基于黑盒的随机性测试,通过随机的变异正常的程序输入来检测程序的响应,以发现程序中隐藏的安全漏洞。
模糊测试可以使用语法规则来产生正常的输入,也可以使用基于特定程序的输入并用试探法来指导输入变量的生成。
- 基于属性的安全性测试
首先确定安全编程规则,然后把这些规则编码 以作为安全性属性,之后就可以此来验证程序代码是否遵守了这些规则。
- 形式化安全性测试
形式化安全测试的基本方法是建立软件的数学模型,在形式规格说明语言的辅助下,提供形式化的规格说明。
形式规格说明语言主要有
- 基于模型的Z、VDM和B语言。
- 基于有限状态语言,如有限状态自动机、SDL和状态图。
- 基于行为的CSP、CCS、LOTOS和Petri Nets等语言。
- 代数语言,如OBJ。
- 混合语言,如离散和连续数学的规格说明语言等。
- 基于风险的安全性测试
风险是指错误发生的可能性和造成的危害程度的结合。
基于风险的安全性测试:以软件安全风险作为测试的出发点和测试活动的主要参考依据。
- 基于故障树的安全性测试技术
基于故障树的安全测试技术是利用故障分析树和故障树的最小割集来生成安全性测试用例的方法。
故障树分析法(Fault Tree Analysis,FTA)是一种将系统故障形成原因由总体到部分按树状细分的分析方法。
- 基于渗透的安全性测试
渗透测试(Penetration Testing)是一个评估主机系统和网络的安全性时模仿黑客特定攻击行为的过程。
安全测试工程师尽可能真实地模拟黑客使用的漏洞 发现技术和攻击手段,对目标的安全性作深入的探测,发现系统最薄弱环节的过程。